package 每日一题;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;

public class _290_单词规律 {
    /**
     * 自解：规律无非就是回文对称 要么就是全都一样
     * 首先判断模式属于哪一种
     *
     * 将s 截取字符串 到ArrayList中
     *
     * 判断pattern 首先模式与list的长度一直
     * if 对称 list从首尾一起遍历 判断是否相等
     * if 相等 就从头

     *------想法错误：pattern中的a对应一个字符 b对应一个字符
     * @return
     */

    public static void main(String[] args) {
        _290_单词规律 test = new _290_单词规律();
        System.out.println(test.wordPattern("abba" , "dog cat cat dog"));
    }
    public boolean wordPattern(String pattern, String s) {

        ArrayList<String> list = new ArrayList<>();
        String temp = "";
        for (int i=0;i<s.length();i++){
            if (s.charAt(i) != ' '){
                temp = temp+s.charAt(i);
                continue;
            }
            list.add(temp);
            temp ="";
        }
        list.add(temp);
        boolean judge = true;//判断模式 如果true表示回文
        if (pattern.charAt(0) == pattern.charAt(1)){
            judge = false;
        }

        if (pattern.length() != list.size()){
            return false;
        }

        if (!judge){
            String k = list.get(0);
            for (String s1:list){
                if (!s1.equals(k)){
                    return false;
                }
            }
            return true;
        }else {
            int i = 0;
            int j = list.size()-1;
            if (list.get(0).equals(list.get(1))){
                return false;
            }
            while (i != list.size()/2){
                if (list.get(i).equals(list.get(j))){
                    i++;
                    j--;
                }else {
                    return false;
                }
            }
            return true;
        }
    }


    /**
     * 题解 用一个int数组存储pattern中每个字符在字符串数组arr中的第一次索引
     * 用hashset存储被char匹配的string
     * 判断当前char是否匹配过
     * if 没有  如果set中已包含string 出错 否则 更新int数组将当前下标存入 并将string加入到set中
     * if 匹配过了 判断当前的string和int数组存的下标对应的string是否相等
     * @param pattern
     * @param s
     * @return
     */
    public boolean wordPattern1(String pattern, String s){
        HashSet<String> set = new HashSet<>();

        int[] a = new int[26];
        Arrays.fill(a,-1);

        String[] arr = s.split(" ");

        if (pattern.length() != arr.length){
            return false;
        }

        for (int i=0;i<arr.length;i++){
            char c = pattern.charAt(i);

            if (a[c-97] == -1){
                if (set.contains(arr[i])){
                    return false;
                }

                a[c-97] = i;
                set.add(arr[i]);
            }else {
                if (!arr[i].equals(arr[a[c-97]])){
                    return false;
                }
            }
        }

        return true;

    }

}
